/*
 * LVGL initialization implementation
 */
#include "lvgl_init.h"
#include "Arduino.h"

// LVGL 显示缓冲区
lv_disp_draw_buf_t draw_buf;
lv_color_t buf1[DISP_BUF_SIZE];

// 外部声明，这些函数将在显示驱动适配文件中实现
extern void lvgl_display_driver_init(void);
extern void lvgl_touch_driver_init(void);

/**
 * @brief LVGL初始化函数
 */
void lvgl_init(void)
{
  // 初始化LVGL库
  lv_init();
  
  // 初始化显示缓冲区
  lv_disp_draw_buf_init(&draw_buf, buf1, NULL, DISP_BUF_SIZE);
  
  // 初始化显示驱动
  lvgl_display_driver_init();
  
  // 初始化触摸驱动
  lvgl_touch_driver_init();
  
  // 初始化默认主题
  lv_theme_t * th = lv_theme_default_init(NULL, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), true, LV_FONT_DEFAULT);
  lv_disp_set_theme(NULL, th);
  
  Serial.println("LVGL initialized successfully!");
}

/**
 * @brief LVGL时钟处理函数，需要定期调用（通常每1ms调用一次）
 */
void lvgl_tick_handler(void)
{
  lv_tick_inc(1); // 增加1ms的tick计数
}

/**
 * @brief LVGL任务处理函数，需要定期调用（通常每5-10ms调用一次）
 */
void lvgl_task_handler(void)
{
  //printf("lvgl_task_handler\n");
  lv_timer_handler(); // 处理LVGL定时器和任务
}

/**
 * @brief 获取LVGL显示缓冲区
 * @return 显示缓冲区指针
 */
lv_disp_draw_buf_t* lvgl_init_draw_buf_get(void)
{
  return &draw_buf;
}